package gui; import java.awt.Dimension; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import bank.Bank; import user.Person; import javax.swing.JButton; import java.awt.event.ActionListener; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.text.DecimalFormat; import java.util.Iterator; import java.util.LinkedList; import java.awt.event.ActionEvent; import javax.swing.JTextPane; import javax.swing.table.DefaultTableModel; import account.Account; import account.SavingAccount; import account.SpendingAccount; public class GUI implements ActionListener { // BANK Bank bank = null; // LOGIN FRAME private JFrame loginFrame; private JTextField CNPtextField; private JTextField IDtextField; private JTextField errorTextField; private JButton btnL; // HOLDER FRAME private JFrame holderFrame; private JTextField moneyTextField; private JTextField totMoneyTextField; private JButton btnWithdraw; private JButton btnAdd; private JButton btnBack; private JLabel type; private JTextPane notifications; private JTextField errorTextFiledHolder; // ADMIN FRAME private JFrame adminFrame; private JTable bankData; private String[] column = { "ID", "NAME", "CNP", "TYPE" }; private Object[][] data; private JScrollPane pane; private JTextPane info; private JButton infoBtn; private JButton btnBack2; private JTextField accID; private JTextField holdeCNP; private JButton btnAddAcc; private JLabel lblHolderName; private JTextField holderName; private JLabel lblAccType; private JTextField accType; private JTextField error; private JButton btnRemoveAcc; private JButton btnAddHolder; private JButton btnRemoveHolder; private JButton btnEnd; private void populateBank() { try { FileInputStream fileIn = new FileInputStream("bank.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); bank = (Bank) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Bank class not found"); c.printStackTrace(); return; } } public GUI() { populateBank(); bank.print(); // LOGIN FRAME loginFrame = new JFrame(); loginFrame.setVisible(true); loginFrame.setBounds(100, 100, 533, 448); loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); loginFrame.getContentPane().setLayout(null); JLabel lblCnp = new JLabel("CNP"); lblCnp.setBounds(139, 203, 62, 20); loginFrame.getContentPane().add(lblCnp); JLabel lblIdAccount = new JLabel("ID Account"); lblIdAccount.setBounds(139, 228, 81, 30); loginFrame.getContentPane().add(lblIdAccount); CNPtextField = new JTextField(); CNPtextField.setBounds(211, 203, 141, 20); loginFrame.getContentPane().add(CNPtextField); CNPtextField.setColumns(10); IDtextField = new JTextField(); IDtextField.setBounds(211, 233, 141, 20); loginFrame.getContentPane().add(IDtextField); IDtextField.setColumns(10); errorTextField = new JTextField(); errorTextField.setEditable(false); errorTextField.setBounds(139, 318, 213, 20); loginFrame.getContentPane().add(errorTextField); errorTextField.setColumns(10); btnL = new JButton("Login"); btnL.setBounds(207, 269, 89, 23); loginFrame.getContentPane().add(btnL); btnL.addActionListener(this); // HOLDER FRAME holderFrame = new JFrame(); holderFrame.setBounds(100, 100, 450, 300); holderFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); holderFrame.getContentPane().setLayout(null); holderFrame.setVisible(false); JLabel lblMoney = new JLabel("Money:"); lblMoney.setBounds(22, 36, 46, 14); holderFrame.getContentPane().add(lblMoney); btnAdd = new JButton("Add"); btnAdd.setBounds(109, 69, 89, 23); holderFrame.getContentPane().add(btnAdd); btnWithdraw = new JButton("Withdraw"); btnWithdraw.setBounds(10, 69, 89, 23); holderFrame.getContentPane().add(btnWithdraw); JLabel lblNewLabel = new JLabel("Moeny in bank"); lblNewLabel.setBounds(22, 181, 77, 14); holderFrame.getContentPane().add(lblNewLabel); moneyTextField = new JTextField(); moneyTextField.setBounds(78, 33, 120, 20); holderFrame.getContentPane().add(moneyTextField); moneyTextField.setColumns(10); totMoneyTextField = new JTextField(); totMoneyTextField.setBounds(112, 178, 86, 20); holderFrame.getContentPane().add(totMoneyTextField); totMoneyTextField.setColumns(10); totMoneyTextField.setEditable(false); btnBack = new JButton("Back"); btnBack.setBounds(37, 227, 89, 23); holderFrame.getContentPane().add(btnBack); type = new JLabel("asd"); type.setBounds(22, 11, 127, 14); holderFrame.getContentPane().add(type); JLabel lblNotifications = new JLabel("Notifications"); lblNotifications.setBounds(275, 73, 132, 14); holderFrame.getContentPane().add(lblNotifications); notifications = new JTextPane(); notifications.setBounds(252, 100, 172, 150); holderFrame.getContentPane().add(notifications); notifications.setEditable(false); errorTextFiledHolder = new JTextField(); errorTextFiledHolder.setBounds(10, 130, 188, 20); holderFrame.getContentPane().add(errorTextFiledHolder); errorTextFiledHolder.setColumns(10); errorTextFiledHolder.setEditable(false); btnBack.addActionListener(this); btnAdd.addActionListener(this); btnWithdraw.addActionListener(this); // ADMIN FRAME adminFrame = new JFrame(); adminFrame.setBounds(100, 100, 533, 448); adminFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); adminFrame.getContentPane().setLayout(null); adminFrame.setVisible(false); bankData = new JTable(new DefaultTableModel(createModel(), column)); bankData.setPreferredScrollableViewportSize(new Dimension(300, 100)); bankData.setFillsViewportHeight(true); pane = new JScrollPane(bankData); pane.setBounds(10, 11, 300, 100); adminFrame.getContentPane().add(pane); info = new JTextPane(); info.setBounds(10, 203, 300, 118); info.setEditable(false); adminFrame.getContentPane().add(info); JLabel accountID = new JLabel("account ID"); accountID.setBounds(370, 18, 80, 14); adminFrame.getContentPane().add(accountID); JLabel accountCNP = new JLabel("holder CNP"); accountCNP.setBounds(370, 73, 80, 14); adminFrame.getContentPane().add(accountCNP); infoBtn = new JButton("info"); infoBtn.setBounds(10, 359, 89, 23); adminFrame.getContentPane().add(infoBtn); btnBack2 = new JButton("back"); btnBack2.setBounds(418, 359, 89, 23); adminFrame.getContentPane().add(btnBack2); accID = new JTextField(); accID.setBounds(364, 42, 86, 20); adminFrame.getContentPane().add(accID); accID.setColumns(10); holdeCNP = new JTextField(); holdeCNP.setBounds(364, 98, 86, 20); adminFrame.getContentPane().add(holdeCNP); holdeCNP.setColumns(10); btnAddAcc = new JButton("add acc"); btnAddAcc.setBounds(20, 122, 115, 23); adminFrame.getContentPane().add(btnAddAcc); lblHolderName = new JLabel("holder Name"); lblHolderName.setBounds(364, 129, 65, 14); adminFrame.getContentPane().add(lblHolderName); holderName = new JTextField(); holderName.setBounds(364, 154, 86, 20); adminFrame.getContentPane().add(holderName); holderName.setColumns(10); lblAccType = new JLabel("acc type"); lblAccType.setBounds(374, 185, 46, 14); adminFrame.getContentPane().add(lblAccType); accType = new JTextField(); accType.setBounds(364, 206, 86, 20); adminFrame.getContentPane().add(accType); accType.setColumns(10); error = new JTextField(); error.setBounds(123, 360, 241, 20); adminFrame.getContentPane().add(error); error.setColumns(10); error.setEditable(false); btnRemoveAcc = new JButton("remove acc"); btnRemoveAcc.setBounds(20, 169, 115, 23); adminFrame.getContentPane().add(btnRemoveAcc); btnAddHolder = new JButton("add holder"); btnAddHolder.setBounds(165, 122, 115, 23); adminFrame.getContentPane().add(btnAddHolder); btnRemoveHolder = new JButton("remove holder"); btnRemoveHolder.setBounds(165, 169, 115, 23); adminFrame.getContentPane().add(btnRemoveHolder); btnEnd = new JButton("end accounts"); btnEnd.setBounds(340, 254, 133, 23); adminFrame.getContentPane().add(btnEnd); btnBack2.addActionListener(this); infoBtn.addActionListener(this); btnAddAcc.addActionListener(this); btnRemoveAcc.addActionListener(this); btnAddHolder.addActionListener(this); btnRemoveHolder.addActionListener(this); btnEnd.addActionListener(this); } public Object[][] createModel() { Iterator<LinkedList<Account>> iterator = bank.getAccounts().iterator(); LinkedList<Account> list; data = new Object[bank.getNrAccounts()][4]; int i = 0, j; while (iterator.hasNext()) { list = iterator.next(); for (j = 0; j < list.size(); j++) { data[i][0] = list.get(j).getID(); data[i][1] = list.get(j).getMainHolder().getName(); data[i][2] = list.get(j).getMainHolder().getCNP(); data[i][3] = list.get(j).type(); i++; } } return data; } public void actionPerformed(ActionEvent e) { // LOGIN if (e.getSource() == btnL) { int ID; if (CNPtextField.getText().equals("admin")) { adminFrame.setVisible(true); loginFrame.setVisible(false); } else { try { ID = Integer.parseInt(IDtextField.getText()); } catch (NumberFormatException q) { errorTextField.setText("invalid CNP or ID"); ID = 0; } if (bank.search(CNPtextField.getText(), ID) == true) { holderFrame.setVisible(true); loginFrame.setVisible(false); totMoneyTextField.setText("" + new DecimalFormat("##.##").format(bank.getAc().getTotalSum())); moneyTextField.setText(""); type.setText(bank.getAc().type()); } else { errorTextField.setText("invalid CNP or ID"); } } } // HOLDER else if (e.getSource() == btnBack) { holderFrame.setVisible(false); loginFrame.setVisible(true); } else if (e.getSource() == btnAdd) { int nr; try { nr = Integer.parseInt(moneyTextField.getText()); } catch (NumberFormatException q) { errorTextFiledHolder.setText("Invalid data"); nr = 0; } if (nr > 0) bank.getAc().addMoney(nr); else errorTextFiledHolder.setText("Invalid data"); totMoneyTextField.setText("" + new DecimalFormat("##.##").format(bank.getAc().getTotalSum())); } else if (e.getSource() == btnWithdraw) { int nr; try { nr = Integer.parseInt(moneyTextField.getText()); } catch (NumberFormatException q) { errorTextFiledHolder.setText("Invalid data"); nr = 0; } if (nr < bank.getAc().getTotalSum() && nr > 0) bank.getAc().withdrawMoney(nr); else errorTextFiledHolder.setText("Invalid data"); totMoneyTextField.setText("" + new DecimalFormat("##.##").format(bank.getAc().getTotalSum())); } // ADMIN else if (e.getSource() == btnBack2) { adminFrame.setVisible(false); loginFrame.setVisible(true); } else if (e.getSource() == infoBtn) { int nr; try { nr = Integer.parseInt(accID.getText()); } catch (NumberFormatException q) { error.setText("Invalid data"); nr = 999; } if (bank.getInfo(nr).equals("")) error.setText("Invalid data"); info.setText(bank.getInfo(nr)); error.setText(""); } else if (e.getSource() == btnAddAcc) { Person p = new Person(holderName.getText(), holdeCNP.getText()); Account a = null; if (accType.getText().equals("saving")) a = new SavingAccount(0, p, 1, 100); else if (accType.getText().equals("spending")) a = new SpendingAccount(0, p, 1, 100); if (a == null || holderName.getText() == null || holdeCNP.getText() == null) error.setText("Invalid data"); else { bank.addAccount(a); error.setText(""); } bankData.setModel(new DefaultTableModel(createModel(), column)); } else if(e.getSource()==btnRemoveAcc){ int nr; try { nr = Integer.parseInt(accID.getText()); } catch (NumberFormatException q) { error.setText("Invalid data"); nr = 999; } Person p = new Person("x", holdeCNP.getText()); Account a = new SavingAccount(nr, p, 1, 1); if(holdeCNP.getText()==null || nr==999) error.setText("Invalid data"); else{ if(!bank.removeAccount(a)) error.setText("Invalid data"); else{ error.setText(""); bankData.setModel(new DefaultTableModel(createModel(), column)); } } }else if(e.getSource()==btnAddHolder){ Person p = new Person(holderName.getText(), holdeCNP.getText()); Person p1; int nr; try { nr = Integer.parseInt(accID.getText()); } catch (NumberFormatException q) { error.setText("Invalid data"); nr = 999; } p1=bank.getMainHolder(nr); Account a = new SavingAccount(nr, p1, 1, 2); if(nr>bank.getNrAccounts() || holderName.getText()==null || holdeCNP.getText()==null){ error.setText("Invalid data"); }else{ error.setText(""); bank.addPerson(p, a); } }else if(e.getSource()==btnRemoveHolder){ Person p = new Person(holderName.getText(), holdeCNP.getText()); Person p1; int nr; try { nr = Integer.parseInt(accID.getText()); } catch (NumberFormatException q) { error.setText("Invalid data"); nr = 999; } p1=bank.getMainHolder(nr); Account a = new SavingAccount(nr, p1, 1, 2); if(nr>bank.getNrAccounts() || holderName.getText()==null || holdeCNP.getText()==null ){ error.setText("Invalid data"); }else{ error.setText(""); bank.removePerson(p, a); bankData.setModel(new DefaultTableModel(createModel(), column)); } }else if(e.getSource()==btnEnd){ Person p = new Person(holderName.getText(), holdeCNP.getText()); if(holdeCNP.getText()==null){ error.setText("Invalid data"); }else{ bank.removeHolder(p); bankData.setModel(new DefaultTableModel(createModel(), column)); error.setText(""); } } } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { new GUI(); } catch (Exception e) { e.printStackTrace(); } } }); } }